////
//// Created by 17775 on 2024/6/17.
////
//
//#include <string.h>
//#include <iostream>
//#include <QtGui>
//#include <cmath>
//#include <QImage>
//#include <QMutex>
//#include <QMutexLocker>
//#include <QVector>
//#include <vector>
//#include "RayCiPro_C.h"
//
//#ifndef RAYCI_BEAMPROFILER_H
//#define RAYCI_BEAMPROFILER_H
//
//using namespace std;
//
//#include <QtGui>
//
//struct sCameraItem
//{
//    sCameraItem() : dwLowId(0), dwHighId(0) {}
//    sCameraItem(const QString& name, quint32 lowId, quint32 highId)
//            : sName(name), dwLowId(lowId), dwHighId(highId) {}
//
//    QString sName;
//    quint32 dwLowId, dwHighId;
//};
//
//typedef std::vector<sCameraItem> tVecCameras;
//
//enum eDataFormat { FORMAT_UNKNOWN, FORMAT_UINT8, FORMAT_FLOAT, FORMAT_CNT };
//
//class BeamProfiler {
//
//signals:
//    void RayCi_Closed();
//
//private:
//    string _strIP;
//    string _strPort;
//    int  _nDocIdLive;
//    int  _nDocIdMeasure;
//    BOOL _bUseOpenLive;
//    BOOL _bCropToAoi;
//    BOOL _bCropToAoiAvailable;
//    DWORD _dwCamIdLow, _dwCamIdHigh;
//
//    // camera parameter
//    std::vector<double>	_vecExposureTimes;
//    std::vector<double>	_vecGain;
//    QSize _sizeData;
//    eDataFormat	_dataFormat;
//    QMutex _csecImageData;
//
//    // data
//    int _nFrameNrCallback;
//    int _nFrameNrRetrieve;
//
//    // callback IDs
//    int _nIdCallback_LiveModeNewFrame;
//    int _nIdCallback_LiveModeClosed;
//    int	_nIdCallback_LiveModeCameraRemoved;
//
//    int _nIdCallback_RayCiClosed;
//
//    tVecCameras	_vecCameras;
//
//    // control worker by event
//    std::condition_variable m_cvStartGetNewFrame;
//    std::condition_variable m_cvCancelGetNewFrame;
//    std::mutex m_mutex;
//    std::thread m_workerThread;
//
//    void QueryCameraList();
//    void ConnectionToLiveMode();
//    void CloseLiveMode();
//    void QueryCameraParameter();
//
//public:
//    BeamProfiler();
//    ~BeamProfiler();
//
////    virtual BOOL Init();
//
//    bool Connect();
////    DWORD BeamProfiler::Worker_GetNewFrame();
//    void InitImage(int cx, int cy);
//    QImage _imgData;
//
//    static void	CallbackRayCi_onExit(IN void* pContext);
//    static void CallbackRayCi_Document_onClose(IN void* pContext, IN int nIdDoc);
//    static void CallbackRayCi_LiveMode_onNewFrame(IN void* pContext, IN int nIdDoc, IN int nFrameNr, IN const tm* tmFrameTime, IN int nFrameTime_ms);
//    static void CallbackRayCi_LiveMode_onCameraRemoved(IN void* pContext, IN int nIdDoc, IN int nIdCamHigh, IN int nIdCamLow);
//
//protected:
//    BOOL IsPortAvailable(WORD wPort);
//};
//
//
//#endif //RAYCI_BEAMPROFILER_H
